package com.hzit.dao.proxy;


import com.hzit.dao.impl.UserDaoImpl;
import org.aopalliance.intercept.MethodInvocation;
import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;

/**
 * 类名：
 * 作者：WF
 * 功能：通过CGLIB实现动态代理 (通过继承目标对象完成动态代理功能)
 */
public class UserDaoImplDynamicProxyCGLIB implements MethodInterceptor {
	public UserDaoImpl createProxy(){
		//1. 定义Enhancer对象
		Enhancer enhancer = new Enhancer();
		//2. 设置当前要生成的代理对象的父类，通过继承完成代理对象的生成
		enhancer.setSuperclass(UserDaoImpl.class);
		//3. 设置当前代理对象的回调对象，参数就是当前的代理对象本身
		enhancer.setCallback(this);
		//4. 创建代理对象
		UserDaoImpl o = (UserDaoImpl) enhancer.create();
		return o;
	}
	//在后台调用的拦截器
	@Override
	public Object intercept(Object o, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
		if (method.getName().equals("query")) {
			checkSecurity();
		}
		return methodProxy.invokeSuper(o,args);
	}

	private void checkSecurity(){
		System.out.println("进行安全性检查（CGLIB动态代理）。。。");
	}
}
